package com.ruoyi.project.system.function.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.enums.CellExtraTypeEnum;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.metadata.CellExtra;
import com.ruoyi.framework.web.exception.DataException;
import com.ruoyi.project.system.function.service.FunctionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
*
*
* @Author: 郑吉志
*
* @Create: 23.2.22
**/
@Slf4j
public class FunctionListener extends AnalysisEventListener<Map<Integer,String>> {

    FunctionService functionService;

    // 有个很重要的点 DemoDataListener 不能被spring管理，要每次读取excel都要new,然后里面用到spring可以构造方法传进
    public FunctionListener(FunctionService functionService) {
        this.functionService = functionService;
    }

    //创建一个为整型数组的集合
    List<int[]> mergerList=new ArrayList<>();
    //创建一个为map集合的集合
    private final List<Map<Integer, String>> cachedDataList = new ArrayList<>();
    //通过AnalysisContext对象，用户可以获取当前解析到的上下文信息，以实现更加灵活和定制化的数据导入。
    //首先把第一行放入map集合里面，因为第一行有很多条数据形成一个map集合，然后再放到一个对象为集合的集合里
    @Override
    public void invoke(Map<Integer, String> data, AnalysisContext context) {
        log.info("这是invoke方法");
        log.info(data.toString());
        cachedDataList.add(data);
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
            saveData();
    }

    /**
     * 加上存储数据库
     */
    private void saveData(){
        log.info("这是saveData方法");
        log.info(cachedDataList.toString());
        functionService.dataProcess(mergerList,cachedDataList);
    }

    @Override
    public void extra(CellExtra extra, AnalysisContext context) {


        if (Objects.requireNonNull(extra.getType()) == CellExtraTypeEnum.MERGE) {
            mergerList.add(new int[]{extra.getFirstRowIndex(), extra.getFirstColumnIndex(), extra.getLastRowIndex(),
                    extra.getLastColumnIndex()});
        }
    }
}
